Seat Maps (Pre- and Post-Booking: Air v35.0 and later)

A Seat Map request can be made to view paid and standard (free) seats. Seat maps display the seats which are available for a given flight, as well as their location within the aircraft.

A seat map can be requested before a booking to determine if there are available free or paid seats, or a seat map can be requested post-booking.

Note:

Schema

Located in AirReqRsp.xsd:

Request

Air Merchandising uses the standard Universal API Seat Map service, SeatMapReq, to support Air Merchandising requests. A ReturnSeatPricing indicator flags the request as a Merchandising request that will return seats that meet the requested criteria.

  1. Enter the minimum data that is required for all carriers and providers. Add optional data to refine the results. Follow these best practices to ensure correct and expedient results:
    1. Leverage long-running connection pools with HTTP “Connection: Keep-Alive”
    2. Include “Accept-Encoding: gzip” to enable compression on response payloads
    3. Set customer receive TCP buffers to at least 500K
    4. Do not use “Expect: 100-continue” in HTTP request headers

  2. Seat Map Request: All Carriers

    Use the following minimum data in a SeatMapReq to return paid or standard seats in SeatMapRsp for all carriers and providers:

    • SearchTraveler. Used to return a seat map for a specific traveler. Optional for API Merchandising carriers and ATPCO carriers when HostReservation is included, but can be included to return a seat map for a specific traveler. For API Connected Carriers via Airline Content Hub, SearchTraveler is required.
    • AirSegment. Used to return a seat map for a specific segment. Send the attributes below to ensure accurate availability information is returned. Optional when HostReservation is included, but can be included to return a seat map for a specific segment.
      • Carrier
      • FlightNumber
      • DepartureTime
      • ArrivalTime*
      • Origin & Destination
      • Group
      • Key
      • ClassOfService**
      • ProviderCode

      *Important: Although SeatMapReq/AirSegment@ArrivalTime is listed as optional in the schema, this attribute must be included in the request to return accurate availability. Otherwise, paid seats are returned as "Blocked".

      **Used instead of BookingCode element from earlier schemas

      Multiple AirSegment elements can be included in one SeatMapReq to add/modify seats.

    • HostReservation. Used to return seat maps for all passengers and all segments in the reservation. Optional if SearchTraveler and AirSegment are included.

    • ReturnSeatPricing. Set to "true" to return paid seats (i.e., pricing associated with a specific seat).

    Use additional, optional request data to refine the results:

    • SearchTraveler @LoyaltyCard. Strongly recommended to return fully accurate seating options.
    • @ReturnBrandingInfo. Set to "true" to return OptionalService/BrandingInfo in the Seat Map response. .

    To receive the accurate pricing for pre-book scenarios, and return a seat map response with accurate paid seat prices (relative to the branded fare selected) to travelers before they commit to booking a flight, enable ReturnPricing="true" in the SeatMap request. Release 19.1

    Note: This functionality is not available for ACH carriers as of Universal API Release 20.1.3 Release 20.1.

    • Capture the Host Token from the Price response to add to the Seat Map Request. For example, in the Price response:
      • <common_v42_0:HostToken Key="9q4bc74R2BKAH1HFAAAAAA==">GFB10101ADT00 01VEUCLSP9 010001#GFB200010101NADTV3021ZCEU0010000699#GFMCXEF021NZCEU LH ADTVEUCLSP9</common_v42_0:HostToken>

    • In the SeatMap request, pass the host token and include the ReturnSeatPricing=”true” attribute:

      • <SeatMapReq xmlns="http://www.travelport.com/schema/air_v42_0" TraceId="TraceID" AuthorizedBy="Travelport" TargetBranch="########" ReturnSeatPricing="true" ReturnBrandingInfo="true">

      • Adding the ReturnSeatPricing=”true” attribute in the request returns an accurate price for the seat.
      • When ReturnSeatPricing=”false,” no seat price will be shown in the response.
      • Both free and paid seats are returned in the response.

    • EMD Interline SeatMap agreements

      • Prior to Universal API release 21.1.4, SeatMap returned ancillaries in the response regardless of EMD interline agreements between carriers.

      • An enhancement with Universal API Release 21.1.4 validates the EMD interline agreements and return ancillaries that are bookable in the response, thus preventing ancillary book failures for ancillaries where an agreement doesn’t exist.

      • Prerequisite: HostToken in SeatMap prebook request must contain plating carrier information.

      • When requesting a SeatMap for a segment(s) and ReturnSeatPricing="true", if those segments don’t have an interline agreement with the plating carrier, the SeatMap response contains seat availability as "blocked" for paid seats, and free seats display as it was displayed prior to release 21.1.4. This is an example of a response without an interline agreement with the plating carrier. See table below for scenarios.

        <air:Rows SegmentRef="###">
         <air:Row Number="4" SearchTravelerRef="###">
          <air:Facility Type="Seat" SeatCode="4-A" Availability="Blocked" Paid="true">
           <air:Characteristic Value="NoSmokingSeat" PADISCode="N"/>
           <air:Characteristic Value="Wing" PADISCode="OW"/>
           <air:Characteristic Value="Window" PADISCode="W"/>
           <air:Characteristic Value="PaidGeneralSeat" PADISCode="CH"/>
          </air:Facility>

         

    Interline Scenario Segments and plating carrier Optional Service call contains SeatMap response
    SeatMap response with Interline Agreement functionality active

    Carrier code Seg#1: AI

    Carrier code seg#2: LH

    Plating carrier LH

    LH segment only because there is no interline agreement between AI and LH

    1, LH segment has Paid seats

    2. AI segment has Paid seats with Availability="Blocked" and free seats

    SeatMap response without Interline Agreement functionality active. Carrier code Seg#1: AI Carrier code seg#2: LH Plating carrier LH Both LH and AI

    1. LH segment has Paid seats

    2. AI segment has Paid seats and free seats

     

    • This provides a total cost to the trip prior to committing to the flight, in the /OptionalServices/OptionalService @TotalPrice attribute in the response.

      <air:OptionalServicesTotal />

      <air:OptionalService Type="PreReservedSeatAssignment" TotalPrice="GBP0.00" SupplierCode="LH" CreateDate="2019-12-06T20:37:57.543+00:00" SequenceNumber="122515" ServiceSubCode="0B5" SSRCode="SEAT" IssuanceReason="A" Key="9q4bc74R2BKAxVJFAAAAAA==" GeographySpecification="Sector" Source="MCE" ViewableOnly="false" Quantity="1" BasePrice="GBP0.00">

      <air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket" />

      </air:OptionalService>

      <air:OptionalService Type="PreReservedSeatAssignment" TotalPrice="GBP19.00" SupplierCode="LH" CreateDate="2019-12-06T20:37:57.543+00:00" SequenceNumber="122063" ServiceSubCode="0B5" SSRCode="SEAT" IssuanceReason="A" Key="9q4bc74R2BKAyVJFAAAAAA==" GeographySpecification="Sector" Source="MCE" ViewableOnly="false" Quantity="1" BasePrice="GBP19.00">

      <air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket" />

      </air:OptionalService>

      <air:OptionalService Type="PreReservedSeatAssignment" TotalPrice="GBP24.00" SupplierCode="LH" CreateDate="2019-12-06T20:37:57.543+00:00" SequenceNumber="121758" ServiceSubCode="0B5" SSRCode="SEAT" IssuanceReason="A" Key="9q4bc74R2BKAzVJFAAAAAA==" GeographySpecification="Sector" Source="MCE" ViewableOnly="false" Quantity="1" BasePrice="GBP24.00">

      <air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket" />

      </air:OptionalService>

       

    • If the seat map does not have enough data, the response displays, "Unable to process fare host token, seat pricing may differ at the time of booking."
    • See the XML Sample Workflow to review full xml code of transaction.
     

     

  3. Enter additional required data for specific carriers, using the information in the columns below.
  4. Note: Additional required data may replace data from Step 1, or be in addition to data from Step 1.

     Seat Map Request: Differences by Carrier Type
    API Connected Carriers via Airline Content Hub
    (e.g., easyJet, Air Canada)
    API Merchandising Carriers
    (e.g., Delta)
    ATPCO Carriers
    (e.g., KLM)

    Enter the minimum data from Step 1.

    Carriers may have additional information that they require. For instance, U2 does not require any additional information in the SeatMapReq. However, other carriers may require some or all of the following information.

    • SupplierCode
    • HostToken
    • AirSegment @HostTokenRef
    • HostReservation. Required by easyJet (U2) in the post-booking flow. Must include:
      • ProviderCode=ACH

      • ProviderLocatorCode returned from ACH in the booking or the Universal Record Retrieve response.

      • Carrier

      • CarrierLocatorCode (same as ProviderLocatorCode)

    Viewing and Booking Requirements

    View paid seats during the booking flow (SeatMapReq).

    Purchase paid seats at the time of PNR creation (AirCreateReservationReq).

    Fulfillment Requirements

    Requires a credit card for fulfillment of paid seats at the time of PNR creation (AirCreateReservationReq).

    Enter the minimum data from Step 1.

    SearchTraveler @LoyaltyCard. Not used by Delta. Delta only uses loyalty cards that are saved in the booking to price the seats.

    Important!

    • Delta has display requirements. Check with your Delta representative for current display requirement details.
    • Customers must have special provisioning to return Delta and United seat maps.

    Viewing and Booking Requirements

    View paid seats (SeatMapReq):

    • During or after booking: United Airlines and Delta.

    Purchase paid seats (AirMerchandisingFulfillmentReq).

    Note: The fulfillment of UA paid seats does not occur until the ticket is issued.

    Fulfillment Requirements

    Requires a credit card for fulfillment of paid seats at the time of booking (AirMerchandisingFulfillmentReq).

    Note: The fulfillment of UA paid seats does not occur until the ticket is issued.

    Enter the minimum data from Step 1.

    SearchTraveler @LoyaltyCard. The frequent flyer number and the associated priority code that are saved in the booking are used to get the correct seat price for the passenger when the carrier has filed discounted seat prices with ATPCO.

    Note: Customers must be provisioned to return ATPCO carrier paid seats. Contact your API Support representative for provisioning.

    Viewing and Booking Requirements

    View paid seats during the booking flow (SeatMapReq).

    Note: SeatMapReq with ReturnSeatPricing=”true” returns paid seats as “Available” or “Occupied”. If ReturnSeatPricing=”false” then the paid seats are returned as “Blocked”.

    Important: Although SeatMapReq/AirSegment@ArrivalTime is listed as optional in the schema, this attribute must be included in the request to return accurate availability. Otherwise, paid seats are returned as "Blocked".

    Purchase paid seats (AirMerchandisingFulfillmentReq).

    Fulfillment Requirements

    Requires an Electronic Miscellaneous Document (EMD-A) additional transaction (EMDIssuanceReq) for fulfillment of paid seats after purchase.

  5. Review the Viewing and Booking Requirements for specific carriers (Columns 1, 2, and 3 in Step 2).
  6. Review the Fulfillment Requirements for specific carriers (Columns 1, 2, and 3 in Step 2).

Note: SearchTraveler @LoyaltyCard. Loyalty Membership information is optional in the schema, and may not be technically required by some suppliers. However, it is strongly recommended that ALL requests include this information so that the supplier can return complete and valid response options for the specified traveler.

Response

A standard SeatMapRsp is returned, including seat availability and seat characteristics.

Element/Attribute Description
HostToken May be returned by some suppliers. This token must be used in a subsequent Air Merchandising fulfillment request. The HostToken may have an associated expiration time.
Remark

Remark no longer returns data.

CabinClass

Does not return data (e.g., Economy or Business Class), because there may be multiple cabin classes in a response.

AirSegment Includes the flight for which the seat map is applicable.
Rows/Row Indicates the row number on the aircraft.

All row and seat characteristics are returned in the Seat Map response.

Locations within each row are identified by the Facility child element.

In Facility, three attributes are used to identify the location and availability of specific seats:

  • @Type indicates the type of space for the facility.
  • @SeatCode uses a number to indicate the row and a letter to indicate the column. For example '12A' indicates the first seat in Row 12.
  • @Availability identifies the status of the seat. By identifying Occupied and Available seats, a graphic representation seat map can be created to include the entire cabin for the requested flight.
    Important: Although SeatMapReq/AirSegment@ArrivalTime is listed as optional in the schema, this attribute must be included in the request to return accurate availability. Otherwise, paid seats are returned as "Blocked".

@Paid may also be returned. If a paid seat is returned in a response free of charge, based on loyalty membership or other factors, @Paid=true.

PassengerSeatPrice is not currently supported in Universal API.

TaxInfo provides a specific tax breakdown with the associated category. TaxInfo is returned for each tax returned by the carrier. Both @Amount and @Category must be returned by the provider, or the TaxInfo element is not returned in the response.

The Characteristic child of Row describes all seats within the row. One or more Characteristic child elements are also associated with each Facility to provide more detailed identification for the seat, and can also be used to provide a more detailed graphic of the seat map.

OptionalServices

Returned when paid seats are returned by the carrier.

The whole OptionalService element MUST be included in the AirCreateReservationReq or AirMerchandisingFulfillmentReq to successfully book a paid seat.

OptionalServices/OptionalService/BrandingInfo contains strapline text information about the seat and an image URL if provided by the carrier.

The ServiceStatus of the OptionalService with Type="PreReservedSeatAssignment" is not returned in the SeatMapRsp.

  • For API Connected Carriers and API Merchandising Carriers, OptionalService @ServiceStatus="Offered" must be included in AirMerchandisingFulfillmentReq.
  • For API Connected Carriers, OptionalService @ServiceStatus=”Offered” must be included in the second AirPriceReq when pricing the optional service.

Some airlines have as industry standard requirement to issue paid seats per segment (one Electronic Miscellaneous Document [EMD] per segment/ancillary). Prior to release 23.1.2, if EMD issuance was not done per segment, the error NOT AUTHORIZED was returned.

  • With the 23.1.2 release, an enhancement supports a mono coupon in pre- and post-book seat map responses for carriers that allow Electronic Miscellaneous Document (EMD) issuance per segment. This reduces the chance of errors when attempting to send a single EMD issuance request, which causes a negative impact to workflows.

  • The OptionalService element returns the Seat Assignment (SA) value ProviderDefinedType="SA" in the SeatMap response.

  • SeatMapRsp/OptionalServices/OptionalService @ProviderDefinedType="SA"

  • See DA 976 for more details.

Errors and Warnings

Warning and error responses are typically returned in SeatMapRsp/ResponseMessage.

 

Exceptions